package com.itqf.proxy.dynimic_proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @Description:
 * @Company: 千锋互联
 * @Author: 李丽婷
 * @Date: 2020/9/28
 * @Time: 下午4:47
 */
public class MyDynimicProxyFactory {


    public  static RentHouse createProxy(){
        //1,创建被代理对象  房东
        RentHouse rentHouse = new HouseMaster();
        //2,jdk提供的api创建的代理类
        /**
         * ClassLoader loader,  类加载器
         * Class<?>[] interfaces,  代理类实现的接口列表（因为代理类和被代理类实现同一个接口，所以可以通过被代理类获得）
         *   InvocationHandler h
         */
     return (RentHouse) Proxy.newProxyInstance(rentHouse.getClass().getClassLoader(),
                rentHouse.getClass().getInterfaces(), new InvocationHandler() {
                    /**
                     *
                     * @param proxy  代理对象
                     * @param method 目标方法（被代理的方法）
                     * @param args  args  参数
                     * @return
                     * @throws Throwable
                     */
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        //辅助代码
                        System.out.println("前");
                         Object result =  method.invoke(rentHouse,args);//调用目标方法
                        //辅助代码
                        System.out.println("后");
                        return result;
                    }
                });


    }



}
